#ifndef VECTOR_H
#define VECTOR_H

#include <iostream>
#include <cmath>

#include "matrix.h"

class Vector3D;

class Vector {
	public:
		Vector(const unsigned int & = 1);
		Vector(const Vector &);
		Vector(const Vector3D &);
		~Vector();

		double innerProduct(const Vector &) const;
		Matrix outterProduct(const Vector &) const;
		Vector scalarProduct(const double &) const;
		double length() const;
		double length_2() const;
		Vector normalize() const;

		unsigned int getRow() const;

		void print() const;

		Matrix toMatrixColumn() const;
		Vector3D toVector3D() const;

		double& operator[](unsigned int) const;
		Vector operator-() const;
		Vector& operator=(const Vector &);

		Vector operator+(const Vector&) const;
        Vector operator-(const Vector&) const;

        Vector3D fromHomogeneousCoordinates() const;

	private:
		unsigned int row;
		double* data;
};

#endif
